﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace DiaryPlanner
{
    public partial class MemoEdit : Form
    {
        Memo thisMemoObject;
        MemoPost thisMemoPost;

        Color yellow = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
        Color blue = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
        Color green = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
        Color pink = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(192)))), ((int)(((byte)(192)))));

        int color;

        public MemoEdit(Memo memoObject)
        {
            thisMemoObject = memoObject;
            thisMemoPost = memoObject.nowMemoPost;

            InitializeComponent();
            editMemoText.Text = thisMemoObject.nowMemoPost.memoText.Text;
            color = thisMemoPost.color;

            switch (this.color) { //다이얼로그 메모장의 초기색상
                case 0:
                    panel1.BackColor = yellow;
                    newDate.BackColor = yellow;
                    editMemoText.BackColor = yellow;                    
                    break;
                case 1:
                    panel1.BackColor = blue;
                    newDate.BackColor = blue;
                    editMemoText.BackColor = blue;                    
                    break;
                case 2:
                    panel1.BackColor = green;
                    newDate.BackColor = green;
                    editMemoText.BackColor = green;                    
                    break;
                case 3:
                    panel1.BackColor = pink;
                    newDate.BackColor = pink;
                    editMemoText.BackColor = pink;                    
                    break;
            }
        }

        private void button2_Click(object sender, EventArgs e)//취소
        {

            this.Close();
        }

        private void button1_Click(object sender, EventArgs e)//저장
        {            
            thisMemoObject.nowMemoPost.memoText.Text = editMemoText.Text;
            thisMemoObject.viewAllMemo();
            thisMemoPost.color = this.color;

            switch (color)
            {
                case 0:
                    thisMemoPost.memoText.BackColor = yellow;
                    thisMemoPost.memoDate.BackColor = yellow;
                    thisMemoPost.BackColor = yellow;

                    break;
                case 1:
                    thisMemoPost.memoText.BackColor = blue;
                    thisMemoPost.memoDate.BackColor = blue;
                    thisMemoPost.BackColor = blue;
                    break;
                case 2:
                    thisMemoPost.memoText.BackColor = green;
                    thisMemoPost.memoDate.BackColor = green;
                    thisMemoPost.BackColor = green;
                    break;
                case 3:
                    thisMemoPost.memoText.BackColor = pink;
                    thisMemoPost.memoDate.BackColor = pink;
                    thisMemoPost.BackColor = pink;
                    break;

            }

            update_db(thisMemoPost.memoDate.Text, thisMemoPost.memoText.Text, thisMemoPost.color);
            /***********************db
             * thisMemoPost.memoText
             * thisMemoPost.color
             * db 내용 수정
             */


            this.Close();
        }

        private void yellowc(object sender, EventArgs e)
        {
            //다이얼로그의 메모장 색상을 바꾼다
            panel1.BackColor = yellow;
            newDate.BackColor = yellow;
            editMemoText.BackColor = yellow;        

          
            this.color = 0;
        }

        private void bluec(object sender, EventArgs e)
        {
            //다이얼로그의 메모장 색상을 바꾼다
            panel1.BackColor = blue;
            newDate.BackColor = blue;
            editMemoText.BackColor = blue;


            this.color = 1;
        }

        private void greenc(object sender, EventArgs e)
        {
            //다이얼로그의 메모장 색상을 바꾼다
            panel1.BackColor = green;
            newDate.BackColor = green;
            editMemoText.BackColor = green;


            this.color = 2;
        }

        private void pinkc(object sender, EventArgs e)
        {
            //다이얼로그의 메모장 색상을 바꾼다
            panel1.BackColor = pink;
            newDate.BackColor = pink;
            editMemoText.BackColor = pink;


            this.color = 3;
        }

        private void update_db(string date, string memo, int color)
        {
            try
            {
                string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" //연결하는 객체의 공급자명(확장자명)
                                         + "data source = "  //데이터 소스=(경로입력하라는거)
                                         + Application.StartupPath ///상대경로 읽어옴
                                         + @"\diaryplannerdb.mdb";//실제 데이터베이스 파일이름

                string commandString = "Select * from [memos]";//memos테이블에 있는 모든필드들을 모두 검색해라.

                OleDbDataAdapter DBAdapter ////DataSet을 채우고 데이터 소스를 업데이트하는 데 사용되는 데이터 명령 집합 및 데이터베이스 연결하게 하는 함수
                    = new OleDbDataAdapter(commandString, connectionString);//connectionString이라는 경로와 쿼리명령을 동적할당

                OleDbCommandBuilder myCommandBuilder ///연결된 데이터베이스에서 DataSet의 변경 내용을 조정하는 데 사용되는 단일 테이블 명령을 자동으로 생성합니다
                    = new OleDbCommandBuilder(DBAdapter);

                DataSet DS = new DataSet(); //DS라는 데이터 셋 동적할당

                DBAdapter.Fill(DS, "memos"); //DS라는 데이터셋에 새로운 memos 테이블에 추가 또는 갱신하겠다고 알림.

                DataTable aTable = DS.Tables["memos"];//memos테이블을 불러와 aTable을 새로 생성해서 저장

                DataColumn[] PrimaryKey = new DataColumn[1];

                PrimaryKey[0] = aTable.Columns["Mdate"]; //a컬럼을 기본키를 설정

                aTable.PrimaryKey = PrimaryKey;//기본키 할당

                DataRow currRow = aTable.Rows.Find(date); //textBox값인 기본키 선택

                    currRow.BeginEdit(); //수정을 할 부분 시작 설정
                    currRow["memoText"] = memo;
                    currRow["color"] = color;
                    currRow.EndEdit(); //수정할 부분 끝 부분 설정
                
                DataSet UpdateSet = DS.GetChanges(DataRowState.Modified); //데이터 상태를 수정한다.
                if (UpdateSet.HasErrors)
                {
                    MessageBox.Show("변경된 데이터에 문제가 있습니다.");
                }
                else
                {
                    DBAdapter.Update(DS, "memos");
                    DS.AcceptChanges(); //실제 데이터를 생성
                }
            }
            catch (DataException DE)
            {
                MessageBox.Show(DE.Message);
            }
            catch (Exception DE)
            {
                MessageBox.Show(DE.Message);
            }
        }

    }
}
